/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gradius.InterfaceGrafica;

import gradius.Util.MP3Player;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JPanel;
import javazoom.jl.decoder.JavaLayerException;

/** Classe que cria o painel do Menu
 *
 * @author Eduardo
 */
public class PainelMenu extends JPanel
{
    private JButton novoJogo;
    private JButton ranking;
    private JButton sobre;
    private JButton sair;
    private JPanel painelBotoes;
    private Image fundo;
    private Menu frame;
    MP3Player pl = new MP3Player();

    /** Construtor da classe PainelMenu
     *
     * @param f - Frame do painel menu
     * @throws FileNotFoundException - Exceção de arquivo não encontrado
     * @throws IOException - Exceção de IO
     */
    public PainelMenu(Menu f) throws FileNotFoundException, IOException
    {
        try {
            pl.play("sounds/sound0.mp3");
        } catch (JavaLayerException ex) {
            Logger.getLogger(PainelMenu.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.frame = f;
        String caminho = "/images/backgrounds/fundo.png";
        URL url = PainelMenu.class.getResource(caminho);
        fundo = Toolkit.getDefaultToolkit().getImage(url);
        painelBotoes = new JPanel(new FlowLayout());
        novoJogo = new JButton("Novo Jogo");
        novoJogo.addActionListener(new OuvinteNovoJogo(frame));
        ranking = new JButton("Ranking");
        ranking.addActionListener(new OuvinteRanking());
        sobre = new JButton("Sobre");
        sobre.addActionListener(new OuvinteSobre());
        sair = new JButton("Sair");
        this.setLayout(new BorderLayout());
        this.add(painelBotoes,BorderLayout.NORTH);
        painelBotoes.setBackground(Color.black);
        painelBotoes.add(novoJogo);
        painelBotoes.add(ranking);
        painelBotoes.add(sobre);
        painelBotoes.add(sair);
        painelBotoes.setOpaque(false);
        sair.addActionListener(new OuvinteBotaoSair());
    }

    /** Método que desenha os elementos na tela
     * @param g - Objeto Graphics para desenho
     */
    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.drawImage(fundo, 0, 0, this);
    }

    /** Classe Ouvinte do evento de clique de botão de Novo Jogo
     *
     */
    private class OuvinteNovoJogo implements ActionListener
    {
        private Menu frame;

        /** Construtor da classe OuvinteNovoJogo
         *
         * @param f - Frame do Menu
         */
        public OuvinteNovoJogo(Menu f)
        {
            this.frame=f;
        }

        /** Método responsavel pela resposta ao evento de clique selecionado
         *
         *
         * @param e - Objeto do evento capturado no clique do botão
         */
        public void actionPerformed(ActionEvent e)
        {
            pl.stop();
            try
            {
                Janela j = new Janela(1,null);
                frame.dispose();
            } 
            catch (FileNotFoundException ex)
            {
                Logger.getLogger(PainelMenu.class.getName()).log(Level.SEVERE, null, ex);
            }
            catch (IOException ex) {
                Logger.getLogger(PainelMenu.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /** Classe Ouvinte do evento de clique de botão de Ranking
     *
     */
    private class OuvinteRanking implements ActionListener
    {
        /** Método responsavel pela resposta ao evento de clique selecionado
         *
         * @param e - Objeto do evento capturado no clique do botão
         */
        public void actionPerformed(ActionEvent e)
        {
           Janela3 j = new  Janela3();
        }
    }

    /** Classe Ouvinte do evento de clique de botão de Sobre
     *
     */
    private class OuvinteSobre implements ActionListener
    {
        /** Método responsavel pela resposta ao evento de clique selecionado
         *
         * @param e - Objeto do evento capturado no clique do botão
         */
        public void actionPerformed(ActionEvent e)
        {
           Janela5 j = new  Janela5();
        }
    }

    /** Classe Ouvinte do evento de clique de botão de Sair
     *
     */
    public class OuvinteBotaoSair implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            System.exit(0);
        }
    }
}
